<?php

class DirectoriesController extends Controller
{
	public $layout='//layouts/column2';

	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('*'),
                'users'=>array('*'),
			),
		);
	}

	public function actionIndex()
	{
        $dirId=isset($_GET['id']) ? $_GET['id'] : 1;

        $currentDir=$this->loadModel($dirId);
        if($url=$currentDir->url){
            $this->redirect($this->createUrl($url));
        }
        $directories=$currentDir->children;

        foreach($files=$currentDir->files as $key=>$file){
            $image=new Images;
            $files[$key]->src=$image->resize($file, 100, 60)->src;
            unset($image, $img);
        }

        $this->render('index', array(
            'directories'=>$directories,
            'files'=>$files,
            'currentPath'=>$currentDir->filesBreadcrumbs(),
            'model'=>$currentDir,
        ));
	}

    public function actionCreate()
    {
        $id=isset($_GET['id']) ? $_GET['id'] : 1;
        $model=new Directories;

        if(Yii::app()->file->create($id, 'Directories')){
            $this->redirect($this->createUrl('directories/index&id='.$id));
        }

        $this->render('create',array(
            'model'=>$model,
        ));
    }

    public function actionUpload()
    {
        $id=isset($_GET['id']) ? $_GET['id'] : 1;
        $dir=new Directories;
        $files=new Files;
        $massage='Загрузка файла';

        if(isset($_POST['upload'])){
            if(Yii::app()->file->upload($id, 'Files')){
                $this->redirect($this->createUrl('directories/index&id='.$id));
            }
            $massage='
                Не удалось загрузить файл. Возможно, файл с таким именем уже существует,
                или размер загружаемого файла превышает допустимый предел.
                Попробуйте переименовать файл, или уменьшить его.
            ';
        }


        $this->render('upload',array(
            'model'=>Files,
            'file'=>$files,
            'files'=>$dir->findByPk($id)->files,
            'massage'=>$massage,
        ));
    }

    public function actionDirUpdate()
    {
        $id=isset($_GET['id']) ? $_GET['id'] : 1;
        $model=$this->loadModel($id);

        if($update=Yii::app()->file->dirUpdate($id, 'Directories')){
            $this->redirect(array('index','id'=>$model->rootId ? $model->rootId : 1));
        }

        $this->render('update',array(
            'model'=>$model,
            'files'=>$model->findAllByAttributes(array('dir_root_id'=>$model->rootId)),
        ));
    }

    public function actionFileUpdate()
    {
        $id=isset($_GET['id']) ? $_GET['id'] : 1;
        $file=new Files;
        $dir=new Directories;
        $model=$file->findByPk($id);

        if(Yii::app()->file->fileUpdate($id, 'Files')){
            $this->redirect(array('index','id'=>$model->file_dir_id));
        }

        $this->render('update',array(
            'model'=>$model,
            'files'=>$dir->findByPk($model->dirId)->files,
        ));
    }

    public function actionPaste()
    {
        $id=isset($_GET['id']) ? $_GET['id'] : 1;
        $dirId=isset($_SESSION['copy']['dirId']) ? $_SESSION['copy']['dirId'] : 0;
        $fileId=isset($_SESSION['copy']['fileId']) ? $_SESSION['copy']['fileId'] : 0;

        $dir=new Directories;
        $file=new Files;

        if(isset($_POST['paste'])){
            $_SESSION['copy']['param']['paste']=isset($_POST['Directories']) ? $_POST['Directories']['pasteOption'] : $_POST['Files']['pasteOption'];
            $_SESSION['copy']['param']['all']=isset($_POST['Directories']) ? $_POST['Directories']['pasteAll'] : $_POST['Files']['pasteAll'];
            Yii::app()->file->paste($id, array('Directories', 'Files'));
        }

        $model=$dir->findByPk($id);
        $title='';
        $option='';
        if($fileId){
            $model=$file->findByPk($fileId);
            $title='Файл с таким именем уже существует. Укажите параметры замены.';
            $option=array('Дать другое имя', 'Заменить', 'Пропустить');
        }
        if($dirId){
            $model=$dir->findByPk($dirId);
            $title='Папка с таким именем уже существует. Укажите параметры замены.';
            $option=array('Совместить', 'Заменить', 'Пропустить');
        }

        $this->render('paste', array(
            'model'=>$model,
            'title'=>$title,
            'option'=>$option,
        ));

    }

	public function loadModel($id)
	{
		$model=Directories::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='directories-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}
